package top.cookieAndSession;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

/**
 *   Session：服务端会话跟踪技术：将数据保存到服务端
 *
 *   Session是基于Cookie实现的
 *
 *   Session在一次会话中获取的Session对象是同一个
 *
 *   HttpSession session = request.getSession()   获取Session对象,使用的是request对象
 *
 *   void setAttribute(String name, Object o)       存储数据到 session 域中
 *   Object getAttribute(String name)               根据 key，获取值
 *   void removeAttribute(String name)              根据 key，删除该键值对
 *
 *  ---------------------------------Session的使用细节-------------------------------
 *
 *  Session钝化与活化：
 *
 *      只要服务器是正常关闭和启动，session中的数据是可以被保存下来的
 *
 *      钝化：在服务器正常关闭后，Tomcat会自动将Session数据写入硬盘的文件中
 *      活化：再次启动服务器后，从文件中加载数据到Session中
 *
 *  Session销毁：
 *      默认情况下，无操作，30分钟自动销毁，失效时间可以通过配置进行修改的，默认值是在Tomcat的web.xml配置文件中
 *
 *      调用Session对象的invalidate()进行销毁，该销毁方法一般会在用户退出的时候，需要将session销毁掉

 *      session数据存储在服务端，服务器重启后，session数据会被保存
 *      浏览器被关闭启动后，重新建立的连接就已经是一个全新的会话，获取的session数据也是一个新的对象
 *      session的数据要想共享，浏览器不能关闭，所以session数据不能长期保存数据
 *      cookie是存储在客户端，是可以长期保存
 *
 *
 *      ------------------------------------小结------------------------------------
 *
 *      Cookie 和 Session 都是来完成一次会话内多次请求间数据共享的
 *
 *      Cookie和Session的区别和应用场景：
 *          区别:
 *              存储位置：Cookie 是将数据存储在客户端，Session 将数据存储在服务端
 *              安全性：Cookie不安全，Session安全
 *              数据大小：Cookie最大3KB，Session无大小限制
 *              存储时间：Cookie可以通过setMaxAge()长期存储，Session默认30分钟
 *              服务器性能：Cookie不占服务器资源，Session占用服务器资源
 *          应用场景:
 *              购物车:使用Cookie来存储
 *              以登录用户的名称展示:使用Session来存储
 *              记住我功能:使用Cookie来存储
 *              验证码:使用session来存储
 *          结论：
 *              Cookie是用来保证用户在未登录情况下的身份识别
 *              Session是用来保存用户登录后的数据
 *
 */
@WebServlet("/session1")
public class Session1 extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
                                        throws ServletException, IOException {
       //存储数据到Session
        HttpSession session = req.getSession();
        session.setAttribute("username","zs");

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
                                        throws ServletException, IOException {
        doGet(req, resp);
    }
}
